home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-12-31 | 48.5 KB | 1,288 lines | [TEXT/R*ch] |
- C.S.M.P. Digest Tue, 20 Oct 92 Volume 1 : Issue 193
-
- Today's Topics:
-
- MacsBug symbols from assembler code?
- # of files
- more on sublaunching
- animating palettes
-
-
-
- The Comp.Sys.Mac.Programmer Digest is moderated by Michael A. Kelly.
-
- The digest is a collection of article threads from the internet newsgroup
- comp.sys.mac.programmer. It is designed for people who read c.s.m.p. semi-
- regularly and want an archive of the discussions. If you don't know what a
- newsgroup is, you probably don't have access to it. Ask your systems
- administrator(s) for details. (This means you can't post questions to the
- digest.)
-
- Each issue of the digest contains one or more sets of articles (called
- threads), with each set corresponding to a 'discussion' of a particular
- subject. The articles are not edited; all articles included in this digest
- are in their original posted form (as received by our news server at
- cs.uoregon.edu). Article threads are not added to the digest until the last
- article added to the thread is at least one month old (this is to ensure that
- the thread is dead before adding it to the digest). Article threads that
- consist of only one message are generally not included in the digest.
-
- The entire digest is available for anonymous ftp from ftp.cs.uoregon.edu
- [128.223.8.8] in the directory /pub/mac/csmp-digest. Be sure to read the
- file /pub/mac/csmp-digest/README before downloading any files. The most
- recent issues are available from sumex-aim.stanford.edu [36.44.0.6] in the
- directory /info-mac/digest/csmp. If you don't have ftp capability, the sumex
- archive has a mail server; send a message with the text '$MACarch help' (no
- quotes) to LISTSERV@ricevm1.rice.edu for more information.
-
- The digest is also available via email. Just send a note saying that you
- want to be on the digest mailing list to mkelly@cs.uoregon.edu, and you will
- automatically receive each new issue as it is created. Sorry, back issues
- are not available through the mailing list.
-
- Send administrative mail to mkelly@cs.uoregon.edu.
-
-
- -------------------------------------------------------
-
- From: datpete@daimi.aau.dk (Peter Andersen)
- Subject: MacsBug symbols from assembler code?
- Date: 20 Aug 92 15:57:33 GMT
- Organization: DAIMI: Computer Science Department, Aarhus University, Denmark
-
- How do I make a (global) symbol known to MacsBug?
- I have tried adding
-
- DC.B $8C, 'MySymbol'
- DC.W $0000
-
- after the last RTS in the code of the procedure, as described in
- the MacsBug manual (Appendix G, p.118, MacsBug version 6.1 manual),
- but the symbol is not known to MacsBug, when I try to debug the code.
-
- I am using MPW 3.2.2, System 7.0.1 (US), MacsBug version 6.2b2 on a
- Macintosh IIx.
-
- I have also tried {MPW}:Examples:AExamples:Sample.a, but although it
- tries to add MacsBug symbols with the macro BdgInfo, again these symbols
- are not known to my MacsBug.
-
- Am I missing something?
-
- Peter Andersen, e-mail: datpete@daimi.aau.dk
-
- +++++++++++++++++++++++++++
-
- From: quinn@cs.uwa.edu.au (Quinn)
- Date: 21 Aug 92 03:09:41 GMT
- Organization: The University of Western Australia
-
- In article <1992Aug20.155733.6869@daimi.aau.dk> Peter Andersen,
- datpete@daimi.aau.dk writes:
- >Am I missing something?
-
- Hmm. I had great fun getting MacsBug symbols working consistently
- in my latest Asm project. Try using the following macro (with
- apologies to those people whose systems don't expand tabs
- properly)...
-
- - ----------------------------------------------
- macro
- MacsBug &Name,&rts:int
- lclc &oldstr
- gbla &debug
-
- if &debug then
-
- if &rts then
- rts ; force rts in specific cases
- endif
-
- dc.b &len(&name)+$80 ; length of string + $80 marks symbol
- &oldstr setc &setting('string')
- string AsIs
- dc.b '&upcase(&Name)' ; define the string AsIs
- string &oldstr
- align ; pad to word boundary
- dc.w 0 ; no literals
-
- endif
-
- endm
- - ----------------------------------------------
-
- ... which you invoke as.
- MacsBug Fred
- MacsBug Jim,1
- at the end of routine Fred that ends in an RTS (or JMP (A0) or
- RTD) or routine Jim that doesn't end in one of the above.
-
- However theres still the problem of whether MacsBug will actually
- see the symbol. Sometimes it does, sometimes it doesn't. I'm not
- actually sure what it depends on but I think it has something to do
- with what code has been executed recently. One thing that I found
- that helps is doing an 'hx' into the heap that the symbol is in.
- But if all else fails you can at least search for the symbol string
- (-:
-
- Quinn "The Eskimo!" <quinn@cs.uwa.edu.au> "Support HAVOC!"
- Department of Computer Science, The University of Western Australia
- -- MacsBug: Don't leave home without it.
- -- This macro is for Pascal; converting it to C is left as an
- exercise to the reader. (-:
-
- +++++++++++++++++++++++++++
-
- From: creiman@Apple.COM (Charlie Reiman)
- Date: 21 Aug 92 17:19:11 GMT
- Organization: Apple Computer Inc., Cupertino, CA
-
- quinn@cs.uwa.edu.au (Quinn) writes:
-
- >In article <1992Aug20.155733.6869@daimi.aau.dk> Peter Andersen,
- >datpete@daimi.aau.dk writes:
- >>Am I missing something?
-
- >Hmm. I had great fun getting MacsBug symbols working consistently
- >in my latest Asm project. Try using the following macro (with
- >apologies to those people whose systems don't expand tabs
- >properly)...
-
- >----------------------------------------------
- > macro
- > MacsBug &Name,&rts:int
- > lclc &oldstr
- > gbla &debug
-
- > if &debug then
- >
- > if &rts then
- > rts ; force rts in specific cases
- > endif
- >
- > dc.b &len(&name)+$80 ; length of string + $80 marks symbol
- >&oldstr setc &setting('string')
- > string AsIs
- > dc.b '&upcase(&Name)' ; define the string AsIs
- > string &oldstr
- > align ; pad to word boundary
- > dc.w 0 ; no literals
- >
- > endif
- >
- > endm
-
- This is almost correct :-) If you have the Macsbug manual, the definition
- of a procedure is on p. 408. Follow the bouncing ball if you have a copy,
- otherwise just mumble through the quote below.
-
- Begin quote:
-
- A procedure is defined as follows:
- o LINK A6 - This instruction is optional; if it is missing, the start
- of the proche procedure is assumed to be immediately after the preceding
- procedure, or at the start of the heap block.
- o Procedure code
- o RTS or JMP (a0) or RTD
- o Procedure name
- o Procedcure constants
-
- End quote.
-
- So the most likely reason you aren't always seeing your symbols is because
- you don't have LINK/UNLK pairs. (I usually don't use them since most asm
- code I write is just glue. Stack frames are overkill for me. I'm making
- the assumption you don't use them much either.)
-
- Second problem: You macro only covers one of the 4 styles of symbols.
- To paraphrase The Book:
-
- Valid symbol characters: [a-zA-Z0-9_%. ] Space is only allowed to pad out
- fixed length symbols
-
- 8 character names: First byte is $20-$7f or $a0-$ff. If the high bit is
- set, ignore it. The next character must have its high bit clear.
-
- 16 character names: First byte is $20-$7f or $a0-$ff, as for 8 byte
- symbols. The second byte will have its high bit set, however. This symbol
- style is used for Object Pascal. The first 8 bytes are the method, the
- second 8 the class.
-
- Still with me? Good. Now we get to the styles you probably want to use:
-
- Short variable length symbol: First byte is $81-$9F. This is the length
- with the high bit set. This is immediately followed by the name itself.
-
- Long variable length symbol: First byte is $80, followed by a length byte,
- followed by the actual name.
-
- For both variable length symbols, its a good idea to place the constant
- data marker after the symbol. The Book sez: "The first word after the
- name specified how many bytes of constant data are present. If there
- are no constants, a length of 0 must be given."
-
- In short, a good symbol would be defined like this:
-
- MyFunkyProc PROC
- link a6,#0
- unlk a6
- rts
- dc.b 11+128,'MyFunkyProc'
- dc.w 0000
- ENDP
-
- You might be able to use only the long variable length style in your macro
- to make life easier on yourself. I haven't tried this but its worth a shot.
-
- Have f
- Bus Err while trying to execute from $50FFC001.
-
-
- - --
- Charlie Reiman - Speaking as an individual, not for Apple Computer.
- creiman@apple.com
- "NEW! Posting Lite! 98% fact free!"
-
- +++++++++++++++++++++++++++
-
- From: ely@norton.com (Dave Ely)
- Date: 22 Aug 92 02:47:24 GMT
- Organization: Symantec / Peter Norton
-
- datpete@daimi.aau.dk (Peter Andersen) writes:
-
- > How do I make a (global) symbol known to MacsBug? I have tried
- > adding
- >
- > DC.B $8C, 'MySymbol'
- > DC.W $0000
- >
- > after the last RTS in the code of the procedure, as described in the
- > MacsBug manual (Appendix G, p.118, MacsBug version 6.1 manual), but
- > the symbol is not known to MacsBug, when I try to debug the code.
- >
- > I am using MPW 3.2.2, System 7.0.1 (US), MacsBug version 6.2b2 on a
- > Macintosh IIx.
-
- You need something like this:
-
- DC.B $8C, 'MySymbol'
- dc.b $0
- DC.W $0000
-
- The MacsBug symbol has to be padded to an even word length so that the
- data length offset (DC.W $0000) is on an even address. There is a
- macro which comes with the samples for for the MPW assembler which
- shows how to create MacsBug strings. I think it's called DbgStr.
-
- - --
- ______________________________________________________________
- Dave Ely \ Internet: david_ely@qm.norton.com
- Symantec Corp. \ ely@norton.com
- Peter Norton Group \ AppleLink: Ely.D
-
- +++++++++++++++++++++++++++
-
- From: datpete@daimi.aau.dk (Peter Andersen)
- Date: 24 Aug 92 08:15:54 GMT
- Organization: DAIMI: Computer Science Department, Aarhus University, Denmark
-
- In <1992Aug20.155733.6869@daimi.aau.dk> I wrote:
-
- >How do I make a (global) symbol known to MacsBug?
- >I have tried adding
-
- > DC.B $8C, 'MySymbol'
- > DC.W $0000
-
- >after the last RTS in the code of the procedure, as described in
- >the MacsBug manual (Appendix G, p.118, MacsBug version 6.1 manual),
- >but the symbol is not known to MacsBug, when I try to debug the code.
-
- >I am using MPW 3.2.2, System 7.0.1 (US), MacsBug version 6.2b2 on a
- >Macintosh IIx.
-
- To sum up: The length byte should be $80 + <length of symbol>.
- Here it should have been $88.
-
- HOWEVER, the MPW assembler has default STRING pascal, meaning that it
- inserts the length byte itself.
- Thus one should use $80 in the first byte, mening that the length is in
- next byte, and then let the assmbler calculate the length:
-
- DC.B $80, 'MySymbol'
- DC.W $0000
-
- This works for me.
- Someone also mentioned that the DC.W should be word aligned, meaning that
- a padding $0 should be inserted:
-
- DC.B $80, 'MySymbol'
- DC.B $00
- DC.W $0000
-
- Peter Andersen
-
- +++++++++++++++++++++++++++
-
- From: REEKES@applelink.apple.com (Jim Reekes)
- Date: 24 Aug 92 19:22:58 GMT
- Organization: Apple Computer, Inc.
-
- In article <1992Aug21.030941.6506@bilby.cs.uwa.edu.au>, quinn@cs.uwa.edu.au
- (Quinn) wrote:
- >
- > In article <1992Aug20.155733.6869@daimi.aau.dk> Peter Andersen,
- > datpete@daimi.aau.dk writes:
- > >Am I missing something?
- >
- > Hmm. I had great fun getting MacsBug symbols working consistently
- > in my latest Asm project. Try using the following macro (with
- > apologies to those people whose systems don't expand tabs
- > properly)...
- >
- > ----------------------------------------------
- > macro
- > MacsBug &Name,&rts:int
- > lclc &oldstr
- > gbla &debug
- >
- > if &debug then
- >
- > if &rts then
- > rts ; force rts in specific cases
- > endif
- >
- > dc.b &len(&name)+$80 ; length of string + $80 marks symbol
- > &oldstr setc &setting('string')
- > string AsIs
- > dc.b '&upcase(&Name)' ; define the string AsIs
- > string &oldstr
- > align ; pad to word boundary
- > dc.w 0 ; no literals
- >
- > endif
- >
- > endm
- > ----------------------------------------------
-
- Here's the macro I currently use.
-
-
-
- macro
- symbol &routineName=&SysMod,&size=0
- lclc &name, &oldString
-
- IF &TYPE('DEBUG') <> 'UNDEFINED' THEN
- rts
- if &routineName[1:1] = '''' then
- &name: setc &eval(&routineName)
- else
- &name: setc &routineName
- endif
-
- &oldString: setc &setting('string')
- string asis
- if &len(&name) < 32 then
- dc.b &len(&name)+$80,'&name'
- else
- dc.b $80,&len(&name),'&name'
- endif
- string &oldString
- align
- dc.w &size
- endif
-
- endm
-
-
- Just becareful where you add this.
-
- It needs the RTS because sometimes you write Asm routines without a
- Link/Unlink. The usage should be like this.
-
- SomeRoutine proc
- ...
- ...
- ...
- symbol "SomeRoutine"
- endp
-
-
- - -----------------------------------------------------------------------
- Jim Reekes, Polterzeitgeist | Macintosh Toolbox Engineering
- | Sound Manager Expert
- Apple Computer, Inc. | RAll opinions expressed are mine, and do
- 20525 Mariani Ave. MS: 81-KS | not necessarily represent those of my
- Cupertino, CA 95014 | employer, Apple Computer Inc.S
-
- ---------------------------
-
- From: kellys@orac.holonet.net (Kelly Schwarzhoff)
- Subject: # of files
- Date: 24 Aug 92 05:47:45 GMT
- Organization: HoloNet (BBS: 510-704-1058)
-
- Does anyone know the maximum # of files that can exist in a folder/disk/
- computer (I'm interested in all 3)? In addition, is there anything that
- will crash before this limit is hit so that there is a smaller practical
- limit (for example, if the operating system works with 2^32 files, but
- Microsoft word crashes with more than 2^16 files).
-
-
- - --
- - -------------------------------------------------------------------------
- Kelly Schwarzhoff
- Internet: kellys@orac.holonet.net Fidonet: 1:161/445.0
- - -------------------------------------------------------------------------
-
- +++++++++++++++++++++++++++
-
- From: probulf@Informatik.TU-Muenchen.DE (Frank Probul)
- Date: 24 Aug 92 11:14:56 GMT
- Organization: Technische Universitaet Muenchen, Germany
-
-
- In article <BtH43M.GvM@iat.holonet.net>, kellys@orac.holonet.net (Kelly Schwarzhoff) writes:
- |> Does anyone know the maximum # of files that can exist in a folder/disk/
- |> computer (I'm interested in all 3)? In addition, is there anything that
- |> will crash before this limit is hit so that there is a smaller practical
- |> limit (for example, if the operating system works with 2^32 files, but
- |> Microsoft word crashes with more than 2^16 files).
- |>
- |>
- There are some limits in the hierarchial file system:
- (The old file System "MFS" on system 3.2 and prior will not be discussed)
-
- - --------------
- V O L U M E S :
- - --------------
- - - all these limits are for volumes and partitions. So if you have a 120 MB
- hard disk partitioned to 40 MB and 80 MB, it's the same as using
- physically different HDs with 40 and 80 MB.
-
- - - each volume is partitioned to a maximum of 2^16 = 65536 blocks.
- The blocksize is a multiple of 512 Bytes.
- The result: on a 30 MB-hard disk each block is 512 bytes, on larger volumes
- the blocksize will be increased. On a 200 MB hard disk the blocksize will be
- 3.5 KBytes, on a CD-ROM or 650 MB hard disk the size is about 10 KBytes.
-
- - - for each fork of a file a total block is used! If you put a 200 Bytes
- TeachText document on a CD-ROM, it occupies 10 KBytes disk space.
- (A MPW document has a resource fork AND a data fork, so 20 KBytes of
- disk space are used)
-
- - - The number of forks on a volume is thus limited to 2^16 = 65536.
- (if each fork is smaller than the blocksize, 65536 files can be there).
- Some files have only a data fork, some files have only a resource fork,
- some have both.
-
- - - the max block size is 2^32 Bytes = 4 GigaBytes! The theoretical limit of
- each partition is thus 256 TeraBytes. This is the suported size of the
- File Manager.
-
- - - There seems to be a bug in the calulating of sizes of the
- Finder, so when using volumes larger than 2 GB some unusual results occur.
- Sometimes the free space will be negative, or the finder won't copy files,
- because of rounding errors.
- (If the hard disk is 4 GBytes and 50 KBytes, the 4 GigaBytes will be
- rounded away resulting in a volume size of 50 kBytes. Now th Finder
- won't copy a 200 KBytes-File, because he thinks that there isn't
- enough memory...)
-
- - - There are some limits of the SCSI-protocol, but I don't know the exact values.
-
- - - The max size of an AppleShare Volume
- (AppleShare 2.0, 3.0 and Personal FileSharing) is limited to 4 GB.
-
- - - The max size of an Novell file server mounted on Macs seems to be 2 GB.
- The Novell-server can handle larger volumes, but the chooser extensions
- won't mount such volumes.
-
- - - The maximum number of files servers which are mounted at the same time
- is limited by the machine type:
- (here I'm not sure, the limits are documented in Inside Mac 5:File Manager)
- Mac Plus: 3 Servers
- Mac SE: 8 Servers
- other Macs: more...
-
- - - The number of volumes mounted on each server is unlimited.
-
- - - THE CONCLUSION:
- 1) Don't use partitions larger than 2 GBytes!
- 2) Partition your volumes if you don't want to waste disk space.
-
- - ---------------
- F O L D E R S :
- - ---------------
- - - The max number of files in a folder is 32768 but the recommended limit
- is about 1000 files, because opening such a volume takes a lot of time.
- Perhaps there can be problems using the standard open/close-dialog because
- the list manager data structure is limited to 32 KBytes. If buffering the
- file names with 30 characters each the limit will be reached when using
- about 1000 files.
-
- - - The max number of items in the Apple Menu folder is limited to 32.000, but
- only the alphabetically 52 first items will be displayed in the Apple Menu.
-
- - -----------------
- M A C H I N E S :
- - -----------------
- _ the limits of machines are the limits of their volumes and folders.
- The number of partitions is unlimited, but the number of open files is
- limited. So if this limit is reaches, no more desktop files can be opened
- an then thye volume can not be mounted.
- I think System 7 handles the number of FCBs (File Control Blocks)
- dynamically.
-
-
- Regarding you concerns about limitations caused by applications:
- (:-Be careful using MicroSoft-Applications... :-)
-
-
-
-
- Frank Probul
- Emanuelstr. 17, D-8000 Munich 40, Germany
-
- AppleLink: Probul.F
- internet: probulf@informatik.tu-muenchen.de
-
- Munich University of Technology
- Department of Computer Science
- Germany
- - ---------------------------------------------
-
- +++++++++++++++++++++++++++
-
- From: hcheng@Auspex.COM (Howard Cheng)
- Date: 25 Aug 92 00:33:07 GMT
- Organization: Auspex Systems, Santa Clara
-
- In article <1992Aug24.111456.20439@Informatik.TU-Muenchen.DE> probulf@Informatik.TU-Muenchen.DE (Frank Probul) writes:
- >- There seems to be a bug in the calulating of sizes of the
- > Finder, so when using volumes larger than 2 GB some unusual results occur.
- > Sometimes the free space will be negative, or the finder won't copy files,
- > because of rounding errors.
- > (If the hard disk is 4 GBytes and 50 KBytes, the 4 GigaBytes will be
- > rounded away resulting in a volume size of 50 kBytes. Now th Finder
- > won't copy a 200 KBytes-File, because he thinks that there isn't
- > enough memory...)
-
- Actually, we just tried this a little while ago. We made a VLP (Very Large
- Partition, > 4GB) on the UNIX server and then mounted that volume onto the
- desktop using NFS/Share (v. 1.1.2) and the Mac was able to read the correct
- size of the volume (some ungodly large number). Other information: Mac IIci,
- System 7.0.1, Tuner 1.1.1.
-
- Howard
-
-
- +++++++++++++++++++++++++++
-
- From: kellys@orac.holonet.net (Kelly Schwarzhoff)
- Organization: HoloNet (BBS: 510-704-1058)
- Date: Wed, 26 Aug 1992 17:56:01 GMT
-
- > - each volume is partitioned to a maximum of 2^16 = 65536 blocks.
- > The blocksize is a multiple of 512 Bytes.
- > The result: on a 30 MB-hard disk each block is 512 bytes, on larger
- > volumes
- > the blocksize will be increased. On a 200 MB hard disk the
- > blocksize will be
- > 3.5 KBytes, on a CD-ROM or 650 MB hard disk the size is about 10
- > KBytes.
-
- Is there anyway to get around this limit? I have a 600MB drive and have it
- formatted so that each block is 10k and can't find a way to have smaller
- blocks. Is the limit of 2^16 due to the operating software or just the
- software that formats the drive.
-
- The reason I'm asking this is that we're setting up a large FirstClass BBS
- software and it stores every message as a file and you cannot have the
- messages in seperate volumes / partitions. I'm running System 7.0 on a IIfx.
-
-
- - --
- - -------------------------------------------------------------------------
- Kelly Schwarzhoff
- Internet: kellys@orac.holonet.net Fidonet: 1:161/445.0
- - -------------------------------------------------------------------------
-
- +++++++++++++++++++++++++++
-
- From: keith@taligent.com (Keith Rollin)
- Organization: Taligent
- Date: Wed, 26 Aug 1992 20:18:19 GMT
-
- In article <BtLr5D.Hy7@iat.holonet.net>, kellys@orac.holonet.net (Kelly
- Schwarzhoff) writes:
- >
- > > - each volume is partitioned to a maximum of 2^16 = 65536 blocks.
- > > The blocksize is a multiple of 512 Bytes.
- > > The result: on a 30 MB-hard disk each block is 512 bytes, on larger
- > > volumes
- > > the blocksize will be increased. On a 200 MB hard disk the
- > > blocksize will be
- > > 3.5 KBytes, on a CD-ROM or 650 MB hard disk the size is about 10
- > > KBytes.
- >
- > Is there anyway to get around this limit? I have a 600MB drive and have it
- > formatted so that each block is 10k and can't find a way to have smaller
- > blocks. Is the limit of 2^16 due to the operating software or just the
- > software that formats the drive.
- >
- > The reason I'm asking this is that we're setting up a large FirstClass BBS
- > software and it stores every message as a file and you cannot have the
- > messages in seperate volumes / partitions. I'm running System 7.0 on a IIfx.
-
- The limit of 2^16 allocation blocks is due to the HFS format. All the data
- structures used to keep track of where files are located on the volume use
- 2-byte values for the block number.
-
- The only way to get more room from your 600MB drive is to partition it into two
- or more smaller logical volumes. Or rewrite the File Manager.
-
- - --
- Keith Rollin
- Phantom Programmer
- Taligent, Inc.
-
-
- +++++++++++++++++++++++++++
-
- From: york@oakland-hills.lucid.com (Bill York)
- Date: 26 Aug 92 21:02:43 GMT
- Organization: Lucid, Inc.
-
- In article <BtLr5D.Hy7@iat.holonet.net> kellys@orac.holonet.net (Kelly Schwarzhoff) writes:
-
- From: kellys@orac.holonet.net (Kelly Schwarzhoff)
-
- Is there anyway to get around this limit? I have a 600MB drive and have it
- formatted so that each block is 10k and can't find a way to have smaller
- blocks. Is the limit of 2^16 due to the operating software or just the
- software that formats the drive.
-
- The reason I'm asking this is that we're setting up a large FirstClass BBS
- software and it stores every message as a file and you cannot have the
- messages in seperate volumes / partitions. I'm running System 7.0 on a IIfx.
-
- Can the software store messages in sub-folders of the main
- message-area folder? You could then make these sub-folders be aliases
- pointing to folders on different partitions. Or does the BBS software
- circumvent your access to the filesystem completely?
-
- +++++++++++++++++++++++++++
-
- From: mlanett@Apple.COM (Mark Lanett)
- Date: 27 Aug 92 04:16:19 GMT
- Organization: Apple Computer Inc., Cupertino, CA
-
- kellys@orac.holonet.net (Kelly Schwarzhoff) writes:
-
- >Is there anyway to get around this limit? I have a 600MB drive and have it
- >formatted so that each block is 10k and can't find a way to have smaller
- >blocks. Is the limit of 2^16 due to the operating software or just the
- >software that formats the drive.
-
- >The reason I'm asking this is that we're setting up a large FirstClass BBS
- >software and it stores every message as a file and you cannot have the
- >messages in seperate volumes / partitions. I'm running System 7.0 on a IIfx.
-
- Not that I'm aware of, but you can always partition the drive anyway and stick
- the non-messages on the other partition. That should drop it to 5K or so.
- - --
- Have a bajillion brilliant Jobsian lithium licks.
- Mark Lanett, NOT speaking for anyone. Personal opinion only.
-
- +++++++++++++++++++++++++++
-
- From: kent@sunfs3.Camex.COM (Kent Borg)
- Date: 27 Aug 92 18:38:19 GMT
- Organization: Camex Inc., Boston MA
-
- In article <YORK.92Aug26160243@oakland-hills.lucid.com> York@Lucid.COM writes:
- >In article <BtLr5D.Hy7@iat.holonet.net> kellys@orac.holonet.net (Kelly Schwarzhoff) writes:
- >
- > From: kellys@orac.holonet.net (Kelly Schwarzhoff)
- >
- > Is there anyway to get around this limit? I have a 600MB drive and have it
- > formatted so that each block is 10k and can't find a way to have smaller
- > blocks. Is the limit of 2^16 due to the operating software or just the
- > software that formats the drive.
- >
- > The reason I'm asking this is that we're setting up a large FirstClass BBS
- > software and it stores every message as a file and you cannot have the
- > messages in seperate volumes / partitions. I'm running System 7.0 on a IIfx.
- >
- >Can the software store messages in sub-folders of the main
- >message-area folder? You could then make these sub-folders be aliases
- >pointing to folders on different partitions. Or does the BBS software
- >circumvent your access to the filesystem completely?
- >
-
-
- The 2^16 limit is an HFS limit.
-
- No, Firstclass does not circumvent the file system, aliases are not
- implemented by the file system--which is what annoys the makers of
- Firstclass. I think they wish they were on a Unix box. To use
- aliases would require extra irksome work on their part.
-
- As a result Firstclass does not know about aliases and isn't likely to
- soon--at least judging from a phone conversation I once had with
- someone fairly technical there. It seems that they are getting burned
- by the Mac's lack of preemptive multitasking and generally starting to
- fight with their server platform choice, not cooperate with it. I am
- worried. (Notice sometime how the server's screen--1.0 at least--can
- get painted and scroll *while* a menu is down. Horrors.)
-
- Disclaimer: I have not yet installed Firstclass version 2, my only
- experiance is with the first version.
-
- As for how to make partitioning choices, put your system folder and
- any non-FirstClass stuff on a small partition (or separate disk) and
- give the the Firstclass database (I think just the "FirstClass Post
- Office" folder) as much space as you can. Your limit is likely going
- to be the 64K-blocks wall. A big allocation size will keep the larger
- files from gobbling up so many of those blocks. Yes, seeing 10K
- vanish with each little message hurts, but total bytes is not the
- first limit you are going to hit with a little-file-laden BBS on a big
- disk. Yes, using two 300 Meg partitions would get you farther, but
- only if you are allowed. A 600 partition is always going to hold at
- least as much as a 300--and usually far more.
-
- Weasel Words: I am sure I have the term "allocation size" slightly
- wrong, but it shouldn't demolish my underlying points.
-
- Coward's Words: Please be gentle when it does become obvious that I
- have no valid underlying points.
-
-
- - --
- Kent Borg kent@camex.com or kentborg@aol.com
- H:(617) 776-6899 W:(617) 426-3577
- As always, things look better when some costs are left out.
- -Economist 3-28-92 p. 94
-
- +++++++++++++++++++++++++++
-
- From: sdorner@qualcom.qualcomm.com (Steve Dorner)
- Date: 27 Aug 92 22:07:40 GMT
- Organization: Qualcomm, Inc., San Diego, CA
-
- kent@sunfs3.Camex.COM (Kent Borg) writes:
- >No, Firstclass does not circumvent the file system, aliases are not
- >implemented by the file system--which is what annoys the makers of
- >Firstclass. I think they wish they were on a Unix box. To use
- >aliases would require extra irksome work on their part.
-
- Sounds like they have an Attitude. Of course, they're not the
- only ones. I can think of one particular development system that ALSO
- doesn't have a clue about aliases. It's called MPW, and the company
- is some fruit name. Ah, well, they probably weren't Apple Partners, and
- didn't get any warning of what was going to happen in System 7. :-)
-
- Aliases are implemented in an unpleasant way for any app that doesn't
- just use standard file, and it's no particular shame that aliases
- aren't supported in such apps. Of course, as the years wear on, one's
- patience wears thinner.
- - --
- Steve Dorner, Qualcomm, Inc.
- Yes, I'm still working on Eudora and it's still free.
-
- ---------------------------
-
- From: morris@quake.think.com (Harry Morris)
- Subject: more on sublaunching
- Date: 15 Sep 92 16:59:55
- Organization: Thinking Machines Corporation, Cambridge MA, USA
-
-
- thanks to everyone who sent suggestion son sub-lanuching. I think I've
- gotten sub-launching pretty much working now!
-
- However, I've got a document I need to launch, I know it's name, type, and
- creator. I've set up the AppParmHandle to point to my file, and that works
- fine. Two problems remain though. I'd appreciate any help I can get.
-
- 1) I need to figure out which app to launch, given a type and creator.
- This is probably normally done by the finder. I think the necessary info
- is in the desktop file, but TN 29 says not to rely on that. Is there any
- kosher way to do this?
-
- 2) When I launch an app (say, MSWord) with a doc, it opens the doc, and
- becomes the frontmost app. But then if I switch back to my app, and try to
- launch another doc in the same app, the app becomes frontmost, but the
- second do is not loaded. Any idea how do this? I've seen OnLocation do
- it.
-
- +++++++++++++++++++++++++++
-
- From: sorchard@crowded-house.den.mmc.com (Steve Orchard)
- Date: 16 Sep 92 13:37:20 GMT
- Organization: Martin Marietta
-
- In article <MORRIS.92Sep15165955@quake.think.com>, morris@quake.think.com (Harry Morris) writes:
- >
- > 1) I need to figure out which app to launch, given a type and creator.
- > This is probably normally done by the finder. I think the necessary info
- > is in the desktop file, but TN 29 says not to rely on that. Is there any
- > kosher way to do this?
-
- To do this open the resource fork of the deskTop file, then load the APPL
- resource. After that then search for the creator, once the creator is found
- it tells you the applications name and Dir ID. You can use this information to
- launch the appliction. If system 7 is running then you should use AppleEvents
- to send the finder a open doc message.
-
- > 2) When I launch an app (say, MSWord) with a doc, it opens the doc, and
- > becomes the frontmost app. But then if I switch back to my app, and try to
- > launch another doc in the same app, the app becomes frontmost, but the
- > second do is not loaded. Any idea how do this? I've seen OnLocation do
- > it.
-
- This is harder what the finder does is fakes a menu hit in the open... under
- the file menu, then it bypasses the file picker. If you use AppleEvents under
- system 7 you won't have this problem.
-
- Good Luck
- Steve Orchard
- sorchard@crowded-house.den.mmc.com
-
-
- +++++++++++++++++++++++++++
-
- From: grobbins@Apple.COM (Grobbins)
- Date: 17 Sep 92 05:44:58 GMT
- Organization: Apple Computer Inc., Cupertino, CA
-
- In article <1992Sep16.133720.12774@den.mmc.com> sorchard@crowded-house.den.mmc.com (Steve Orchard) writes:
- >In article <MORRIS.92Sep15165955@quake.think.com>, morris@quake.think.com (Harry Morris) writes:
- >> 1) I need to figure out which app to launch, given a type and creator.
- >> This is probably normally done by the finder. I think the necessary info
- >> is in the desktop file, but TN 29 says not to rely on that. Is there any
- >> kosher way to do this?
- >To do this open the resource fork of the deskTop file, then load the APPL
- >resource. After that then search for the creator, once the creator is found
- >it tells you the applications name and Dir ID. You can use this information to
- >launch the appliction. If system 7 is running then you should use AppleEvents
- >to send the finder a open doc message.
-
- Opening the resource fork of the desktop file is a bad idea since
- the resource map may not be accurate.
-
- Sending an "open doc" event to the Finder doesn't do anything; you can
- send an Open Selection Finder event, though the current Finder does not
- give any feedback to indicate whether the event succeeded, so this is
- not a great approach.
-
- Under System 6, there is no good, documented, reliable way to find
- the creator of a document short of searching the disk. Under System 7,
- the Desktop Manager makes it easy. Pasted below is some code which
- shows both the "safe" (Desktop Manager) and "unsafe" (Desktop file)
- ways of finding the application for a document.
-
- Launching an application should be done by calling LaunchApplication
- (shown in the Process Management chapter of Inside Mac VI, or by
- calling _Launch under System 6, as documented in the Sublaunch Tech Note.)
- To open a document with an application, pass LaunchApplication a coerced
- 'odoc' event in the appParameters field; see the snippet "LaunchWithDoc"
- (available at ftp.apple.com) for an example.
-
- >> 2) When I launch an app (say, MSWord) with a doc, it opens the doc, and
- >> becomes the frontmost app. But then if I switch back to my app, and try to
- >> launch another doc in the same app, the app becomes frontmost, but the
- >> second do is not loaded.
- >This is harder what the finder does is fakes a menu hit in the open... under
- >the file menu, then it bypasses the file picker. If you use AppleEvents under
- >system 7 you won't have this problem.
-
- Under System 7, the system will pull "puppet strings" for you by
- simulating an Open menu selection if your application sends an 'odoc'
- event but the target is not high-level event aware. So go ahead and
- send 'odoc's to everyone (except when launching; then, coerce the
- odoc and include it with the LaunchApplication call.)
-
- Grobbins grobbins@apple.com
-
- Usual disclaimers apply.
-
- - ---
-
-
- FUNCTION FindAppFromDoc(docFSSpec: FSSpec; VAR appFSSpec: FSSpec): OSErr;
- { first find an app on the same volume; next try local volumes;
- next try remote volumes }
-
- { to find applications on volumes without a Desktop Database, we rely on
- the Desktop file. This is bad, bad, as explained below. }
-
- LABEL 1;
- TYPE
- volumePass = (document, local, remote, done);
-
- { record in APPL resource of Desktop file }
- APPLTypePtr = ^APPLType;
- APPLType = RECORD
- creator: OSType;
- dirID: LongInt;
- name: Str63; { actually, name size is variable }
- END;
- VAR
- myDTPBRec: DTPBRec;
- docFInfo, dummyFInfo: FInfo;
- retCode: OSErr;
- theVolumePass: volumePass;
- theVolumeCounter: INTEGER;
-
- myHParamBlockRec: HParamBlockRec;
- myGetVolParmsInfoBuffer: GetVolParmsInfoBuffer;
- remoteFlag, foundFlag: BOOLEAN;
-
- resRefNum: INTEGER;
- resHandle: Handle;
- theAPPLType: APPLType;
- theAPPLTypePtr: APPLTypePtr;
- offset: LONGINT;
- BEGIN
-
- theVolumePass := document;
- foundFlag := FALSE;
-
- retCode := FSpGetFInfo(docFSSpec, docFInfo);
- IF retCode <> noErr THEN GOTO 1;
-
- REPEAT { for each kind of pass }
-
- theVolumeCounter := 0;
-
- REPEAT { for each volume, except on first pass }
-
- { first, find the vRefNum of the volume to be checked }
-
- IF theVolumePass = document THEN { use doc's own volume }
- myDTPBRec.ioVRefNum := docFSSpec.vRefNum
- ELSE
- BEGIN
- theVolumeCounter := theVolumeCounter + 1;
-
- { loop through all drives }
- myHParamBlockRec.ioCompletion := NIL;
- myHParamBlockRec.ioNamePtr := NIL;
- myHParamBlockRec.ioVRefNum := 0;
- myHParamBlockRec.ioVolIndex := theVolumeCounter;
- retCode := PBHGetVInfoSync(@myHParamBlockRec);
-
- IF retCode = nsvErr THEN Leave; { checked all drives }
- IF retCode <> noErr THEN GOTO 1;
-
- { is this one remote? }
- myHParamBlockRec.ioBuffer := @myGetVolParmsInfoBuffer;
- myHParamBlockRec.ioReqCount :=
-
- Sizeof(myGetVolParmsInfoBuffer);
- retCode := PBHGetVolParmsSync(@myHParamBlockRec);
- IF (retCode <> noErr) THEN GOTO 1;
-
- { volume should be remote only on remote pass, else skip it }
- IF (myGetVolParmsInfoBuffer.vMServerAdr <> 0)
- <> (theVolumePass = remote) THEN Cycle;
-
- { found a volume of interest }
- myDTPBRec.ioVRefNum := myHParamBlockRec.ioVRefNum;
-
- END; { ELSE }
-
- myDTPBRec.ioNamePtr := NIL;
-
- { Get the application name and directory from the desktop database, if
- the volume has one. Otherwise, check the desktop file. }
-
- retCode := PBDTGetPath(@myDTPBRec);
- IF (retCode = noErr) AND (myDTPBRec.ioResult = noErr) AND
- (myDTPBRec.ioDTRefNum <> 0) THEN
- BEGIN
- { get application name and directory }
- myDTPBRec.ioNamePtr := @appFSSpec.name; { change the file spec name}
- myDTPBRec.ioIndex := 0;
- myDTPBRec.ioFileCreator := docFInfo.fdCreator;
- myDTPBRec.ioCompletion := NIL;
-
- retCode := PBDTGetAPPLSync(@myDTPBRec);
- IF retCode = noErr THEN
- BEGIN
- appFSSpec.parID := myDTPBRec.ioAPPLParID;
- appFSSpec.vRefNum := myDTPBRec.ioVRefNum;
- foundFlag := TRUE;
- END;
- END
- ELSE
- { check Desktop file if there is one on the volume }
- { WARNING: this next section is a bad idea; leave
- it out unless you absolutely have to find the
- application. The steps shown are officially
- undocumented and discouraged. }
-
- { This is risky, because the Desktop file is
- probably already open with write priveleges by
- the Finder, and the Macintosh OS does not guarantee
- that the resource map is valid }
-
- BEGIN
-
- { root directory's dirID is always 2 }
- { application directory info is kept in APPL resource }
- { HOpenResFile with read permission should give a unique
- resource reference number, making it safe to call
- CloseResFile later. }
-
- resRefNum := HOpenResFile(myDTPBRec.ioVRefNum, 2,
- 'Desktop', fsRdPerm);
- retCode := ResError;
- IF retCode = noErr THEN
- BEGIN
- resHandle := Get1IndResource('APPL', 1);
- retCode := ResError;
-
- IF (retCode = noErr) AND (resHandle <> NIL) THEN
- { just checking resHandle <> NIL is enough }
- BEGIN
- HLock(resHandle);
- offset := 0;
-
- { loop through all application information in the APPL }
-
- WHILE (offset < SizeResource(resHandle)) AND NOT foundFlag
- DO
- BEGIN
- theAPPLTypePtr :=
- APPLTypePtr(Pointer(offset+ORD4(resHandle^)));
- theAPPLType := theAPPLTypePtr^;
-
- IF (theAPPLType.creator = docFInfo.fdCreator) AND
- { desktop database sometimes points to phantom apps }
- (HGetFInfo(myDTPBRec.ioVRefNum, theAPPLType.dirID,
- theAPPLType.name,
- dummyFInfo) = noErr) THEN { a file really is there }
- BEGIN
- { found the app }
- appFSSpec.parID := theAPPLType.dirID;
- appFSSpec.vRefNum := myDTPBRec.ioVRefNum;
- appFSSpec.name := theAPPLType.name;
- { really should call FSMakeFSSpec instead }
- foundFlag := TRUE;
- END;
- { to find next, skip over creator code, dirID, name,
- pad byte }
- offset := offset + 4 + 4 + 1 + Length(theAPPLType.name);
-
- { of course, MPW Pascal compiles this down to
- ADDQ.L #$4,D0
- ADDQ.L #$4,D0
- ADDQ.L #$1,D0
- CLR.W D1
- MOVE.B -$01AA(A6),D1
- EXT.L D1
- MOVE.L D1,D4
- ADD.L D0,D4 }
-
- IF (offset MOD 2) = 1 THEN offset := offset + 1;
- END; { WHILE }
- HUnlock(resHandle);
-
- CloseResFile(resRefNum);
- END; { IF }
- END; { IF }
- END; { ELSE }
-
- UNTIL foundFlag OR (theVolumePass = document);
- { OR ran out of drives, due to Leave statement }
-
- theVolumePass := SUCC(theVolumePass)
-
- UNTIL foundFlag OR (theVolumePass = done);
-
- IF NOT foundFlag THEN retCode := fnfErr;
- 1:
- FindAppFromDoc := retCode;
- END;
-
-
- ---------------------------
-
- From: George.Economou@p4.f120.n129.z1.FIDONET.ORG (George Economou)
- Subject: animating palettes
- Date: 29 Aug 92 02:45:20 GMT
- Organization: FidoNet node 1:129/120.4 - Mac For The Mind, Pittsburgh PA
-
- I am trying to animate a palette but a few colors refuse to animate. How can
- I make it so that all colors animate?
- - --
- George Economou via cmhGate - Net 226 fido<=>uucp gateway Col, OH
- UUCP: ...!n8emr!bluemoon!cmhgate!129!120.4!George.Economou
- INET: George.Economou@p4.f120.n129.z1.FIDONET.ORG
-
- +++++++++++++++++++++++++++
-
- From: johnsd2@vccnw05.its.rpi.edu (Daniel Norman Johnson)
- Organization: Rensselaer Polytechnic Institute, Troy, NY.
- Date: Thu, 3 Sep 1992 12:17:26 GMT
-
- In article <966857.2AA30874@cmhgate.fidonet.org>, George.Economou@p4.f120.n129.z1.FIDONET.ORG (George Economou) writes:
- |> I am trying to animate a palette but a few colors refuse to animate. How can
- |> I make it so that all colors animate?
-
- Are the colors that wont animate Black and White? If not, I have no clue
- what is wrong. If so, the Palette Manager does that on purpose (so
- windows, menus, etc can be drawn) and you should probably let it do so. If
- you just gotta change those colors, I expect the Color Manager can do it,
- but I dont have details. (I have never tried to do this)
- - --
- - Dan Johnson
- And God said "Jeeze, this is dull"... and it *WAS* dull. Genesis 0:0
-
- These opinions have had all identifiying marks removed, and are untraceable.
- You'll never know whose they are.
-
- +++++++++++++++++++++++++++
-
- From: George.Economou@p4.f120.n129.z1.FIDONET.ORG (George Economou)
- Date: 14 Sep 92 00:13:50 GMT
- Organization: FidoNet node 1:129/120.4 - Mac For The Mind, Pittsburgh PA
-
- >We need more to go on than this. What colors aren't animating? Some
- >code would be helpful.
- >
- >If you want to animate the first and last color in the color table,
- >black and white...well, you just can't do it with the Palette Manager.
- >You'll have to use the Color Manager instead (though I recommend a long
- >hard think before deciding to do this).
-
- I have no troubles dealing with the black and white (I don't use them for the
- drawing). What I am doing, is first getting a palette from a resource and
- assigning it to a windowptr with SetPalette(). Two questions: what would the
- ideal usage be, pmanimated or pmanimated+pmtolerant? and should I set the
- cupdates field of SetPalette() to true or false?
- I then call Activatepalette() for the windowptr.
- Then, I draw into an offscreen pixmap with the same palette SetPalette()'ed to
- it using rgbforecolor, not pmforecolor (I abandoned pmforecolor 'cause I
- thought it might be a problem cause and I can do better effects without it).
- Then I copybits() it to the windowptr previously mentioned and it works. Then
- I call animatepalette() and only about half of the colors animate, the other
- half just sitting there doing nothing. It is the same colors every time, and
- they are a few reds and a few greens, mixed in with all the others. :P
-
- Hope that helps.... thanks for helping out!
- *8)
- - -G e o r g eE c o n o m o u
- :):):):)
-
- - --
- George Economou via cmhGate - Net 226 fido<=>uucp gateway Col, OH
- UUCP: ...!n8emr!bluemoon!cmhgate!129!120.4!George.Economou
- INET: George.Economou@p4.f120.n129.z1.FIDONET.ORG
-
- +++++++++++++++++++++++++++
-
- From: k044477@hobbes.kzoo.edu (Jamie R. McCarthy)
- Date: 16 Sep 92 21:40:11 GMT
- Organization: Kalamazoo College
-
- George.Economou@p4.f120.n129.z1.FIDONET.ORG (George Economou) writes:
- >What I am doing, is first getting a palette from a resource and
- >assigning it to a windowptr with SetPalette(). Two questions: what would the
- >ideal usage be, pmanimated or pmanimated+pmtolerant? and should I set the
- >cupdates field of SetPalette() to true or false?
-
- Well, since there's no such usage category as pmAnimated+pmTolerant, I
- guess that narrows it down. :-) pmAnimated will do you just fine;
- there wouldn't be any point to making it tolerant or courteous, since
- that only matters when two windows share a palette entry, and pmAnimated
- colors are never shared between windows.
-
- And the updates field should be TRUE, generally speaking. If you pass
- FALSE, you'll never get update events when the color environment
- changes--for example, when your app goes into the background and you
- lose all those nice pmAnimated colors. (You might pass FALSE if your
- app will never be backgrounded, or, say, if you're the ViewColors DA,
- which just draws the color environment pmExplicitly anyway. But
- generally, pass TRUE.)
-
- >I then call Activatepalette() for the windowptr.
-
- That's unnecessary; SetPalette() takes care of that for you. (I don't
- think it messes anything up, but I could be wrong. Anyone else know?)
-
- >Then, I draw into an offscreen pixmap with the same palette SetPalette()'ed to
- >it using rgbforecolor, not pmforecolor (I abandoned pmforecolor 'cause I
- >thought it might be a problem cause and I can do better effects without it).
-
- OK. In the Winter 92 develop, Forrest Tanaka has a little 2-page
- article about the Palette Manager and off-screen pixmaps, in which he
- explains that pmCourteous, pmWhite, and pmBlack usages work, but that
- pmTolerant, pmAnimated, and pmExplicit do not.
-
- I'm not sure what it would mean to SetPalette() a palette to a pixmap.
- I'm presuming you have indeed set up your offscreen CGrafPort properly,
- and you're passing its pointer to SetPalette().
-
- RGBForeColor will, I believe, assign the color index based on the
- current _GDevice_, so that should work if your window's already been
- created, because the color environment on the _screen_ is the same as
- the one offscreen. But this will fail if things get iffy; for example,
- if your window isn't frontmost at the time.
-
- >Then I copybits() it to the windowptr previously mentioned and it works.
-
- Two possibilities here; which one is the case, depends on how you made
- your offscreen pixmap. Either (1) its color table's seed is identical
- to the screen's, and CopyBits is blindly putting the colors up, or (2)
- the seeds are different, and CopyBits, doggedly refusing to use those
- pmAnimated colors, is instead giving you very close matches to the
- colors you want, so close that you don't immediately notice.
-
- (Or, (3), you've already done what I'm about to say, and just didn't
- mention it. :-)
-
- There's two ways to CopyBits an offscreen pixmap into pmAnimated colors:
- the fast, not-so-easy way, and the slow, a-little-easier way.
-
- The fast way is (1) above: make _sure_ your offscreen color table and
- the onscreen color table agree about the important colors. Then, set
- your offscreen pixmap's color table's ctSeed value to the screen's
- pixmap's color table's ctSeed, and blast those bits to the screen.
- CopyBits, when it sees equal seeds, just copies the pixels. This is a
- little harder if you want to draw in the offscreen pixmap, because
- normal QuickDraw commands don't care whether the destination ctSeed is
- equal to the screen's (in fact, aren't even aware of the screen at all).
-
- The slow way is to set bit 14 of your offscreen pixmap's color table,
- and set all the ColorSpec.value entries to the _palette_ entries you
- want. CopyBits will, for each source pixel, look its value up in the
- table, convert that palette entry to a clut entry, and write that to the
- screen. It's probably two or three times slower (I've never tested it).
- But it's easier, if you're using QuickDraw to go offscreen, because
- there's none of this chicanery with ctSeeds...
-
- >Then
- >I call animatepalette() and only about half of the colors animate, the other
- >half just sitting there doing nothing.
-
- Hmmm. Strange behavior. You've stumped me. :-) If I had to guess,
- I'd say the seeds were equal, and the P.M. had coincidentally given half
- the colors the same clut index as palette index, so that only these were
- animating...
- - --
- Jamie McCarthy Internet: k044477@kzoo.edu AppleLink: j.mccarthy
- Memo to myself:
- Do The Dumb Things I Gotta Do.
- Touch The Puppet Head.
-
- ---------------------------
-
- End of C.S.M.P. Digest
- **********************
-